
// 确保正确导入 Cookies
import Cookies from 'js-cookie'

import router from '@/router'
import store from '@/store'

// 可以将 TOKEN_KEY 提取到配置文件中
const TOKEN_KEY = 'Admin-Token'

export function getToken () {
  return Cookies.get(TOKEN_KEY)
}

export function setToken (token) {
  return Cookies.set(TOKEN_KEY, token)
}

export function removeToken () {
  return Cookies.remove(TOKEN_KEY)
}

/**
 * 生成UUID (用于验证码)
 * 格式: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
 */
export function getUUID () {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = Math.random() * 16 | 0
    const v = c === 'x' ? r : (r & 0x3 | 0x8)
    return v.toString(16)
  })
}

/**
 * 生成随机字符串 (简单版，可用于验证码)
 * @param {number} len 长度
 */
export function randomString (len = 32) {
  const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  const maxPos = $chars.length
  let pwd = ''
  for (let i = 0; i < len; i++) {
    pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
  }
  return pwd
}

/**
 * 检查权限
 * @param {string} key 权限标识
 */
export function isAuth (key) {
  try {
    const permissions = JSON.parse(sessionStorage.getItem('permissions') || '[]')
    return permissions.indexOf(key) !== -1
  } catch (error) {
    console.error('解析权限数据时出错:', error)
    return false
  }
}

/**
 * 树形数据转换
 * @param {Array} data 原始数据
 * @param {string} id ID字段名 默认'id'
 * @param {string} pid 父ID字段名 默认'parentId'
 * @param {string} children 子节点字段名 默认'children'
 */
export function treeDataTranslate (data, id = 'id', pid = 'parentId', children = 'children') {
  const res = []
  const temp = {}

  // 首先将所有节点存储到临时对象中
  for (let i = 0; i < data.length; i++) {
    temp[data[i][id]] = data[i]
  }

  // 构建树形结构
  for (let k = 0; k < data.length; k++) {
    // 如果当前节点有父节点，并且不是自身引用
    if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
      if (!temp[data[k][pid]][children]) {
        temp[data[k][pid]][children] = []
      }
      if (!temp[data[k][pid]]._level) {
        temp[data[k][pid]]._level = 1
      }
      data[k]._level = temp[data[k][pid]]._level + 1
      temp[data[k][pid]][children].push(data[k])
    } else {
      res.push(data[k])
    }
  }
  return res
}

/**
 * 清除登录信息
 */
export function clearLoginInfo () {
  removeToken() // 使用上面定义的方法
  // 注释掉的代码可以考虑删除或说明原因
  // Vue.cookie.delete('token')
  store.commit('resetStore')
  router.options.isAddDynamicMenuRoutes = false
}

/**
 * 生成验证码图片URL（纯前端开发版）
 */
export function getCaptchaUrl () {
  // 生成4位随机验证码（大写字母+数字）
  const text = randomString(4).substring(0, 4).toUpperCase()

  // 新增存储当前验证码到sessionStorage
  sessionStorage.setItem('current_captcha', text)

  // 创建Canvas绘制验证码
  const canvas = document.createElement('canvas')
  canvas.width = 120
  canvas.height = 40
  const ctx = canvas.getContext('2d')

  if (!ctx) {
    console.error('不支持 Canvas 绘制验证码')
    return ''
  }

  // 1. 绘制渐变背景
  const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0)
  gradient.addColorStop(0, '#f5f5f5')
  gradient.addColorStop(1, '#e0e0e0')
  ctx.fillStyle = gradient
  ctx.fillRect(0, 0, canvas.width, canvas.height)

  // 2. 绘制干扰线（5条随机彩色线段）
  for (let i = 0; i < 5; i++) {
    ctx.strokeStyle = `hsl(${Math.random() * 360}, 70%, 60%)`
    ctx.beginPath()
    ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height)
    ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height)
    ctx.stroke()
  }

  // 3. 绘制验证码文本（带随机旋转效果）
  ctx.font = 'bold 26px Arial'
  for (let i = 0; i < text.length; i++) {
    ctx.save()
    ctx.translate(25 + i * 25, 30)
    ctx.rotate((Math.random() - 0.5) * 0.5)
    ctx.fillStyle = `hsl(${Math.random() * 60 + 200}, 70%, 30%)`
    ctx.fillText(text[i], 0, 0)
    ctx.restore()
  }

  // 控制台输出验证码（方便开发测试）
  console.log('[DEV] 当前验证码:', text)

  // 返回Base64图片数据
  return canvas.toDataURL('image/png')
}

// 新增验证码验证函数
export function validateCaptcha (input) {
  const currentCaptcha = sessionStorage.getItem('current_captcha')
  return currentCaptcha && input.toUpperCase() === currentCaptcha
}

